package com.ccp.dev.workflow.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.workflow.bpminterface.IActDefMapper;
import com.ccp.dev.workflow.model.bpm.TaskSignData;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * ClassDescribe:
 * 会签数据 数据交换层
 * @author :wangcheng
 * Date: 2019-09-06
 */
public interface TaskSignDataDao extends IBaseMapper<TaskSignData, String>, IActDefMapper {

    /**
     * 取得某个流程某个节点所有的投同意票的总数
     * @param procInstId 流程实例Id
     * @param nodeId 节点Id
     * @return
     */
    Integer getAgreeVoteCount(@Param("procInstId") String procInstId, @Param("nodeId") String nodeId);

    /**
     * 取得某个流程某个节点所有的投反对票的总数
     * @param procInstId 流程实例Id
     * @param nodeId 节点Id
     * @return
     */
    Integer getRefuseVoteCount(@Param("procInstId") String procInstId, @Param("nodeId") String nodeId);

    /**
     * 更新本次会签投票完成的状态
     * @param procInstId 流程实例id
     * @param nodeId 节点id
     */
    void batchUpdateCompleted(@Param("procInstId") String procInstId, @Param("nodeId") String nodeId);

    /**
     * 根据实例id和流程节点获取流程会签人员数据
     * @param params 流程实例id
     * @return
     */
    List<TaskSignData> queryByNodeAndInstanceId(Map params);

    /**
     * 返回某个任务的会签数据
     * @param taskId 任务id
     * @return 会签数据对象
     */
    TaskSignData getByTaskId(String taskId);

    /**
     * 取得最大的批次。
     * @param procInstId
     * @param nodeId
     * @return
     */
    Integer getMaxBatch(@Param("procInstId") String procInstId, @Param("nodeId") String nodeId);

    /**
     * 返回某个用户某次会签的记录
     * @param procInstId 流程实例id
     * @param nodeId 节点id
     * @param voteUserId 执行人id
     * @return
     */
    TaskSignData getUserTaskSign(@Param("procInstId") String procInstId, @Param("nodeId") String nodeId, @Param("voteUserId") String voteUserId);

    /**
     * 返回会签流程的参与人数
     * @param procInstId 流程实例id
     * @param nodeId 节点id
     * @param notCompleted 会签是否结束
     * @return
     */
    Integer getMaxSignNums(@Param("procInstId") String procInstId, @Param("nodeId") String nodeId, @Param("isCompleted") Short notCompleted);
}
